GskRenderNode *node,
RenderOpBuilder *builder)
{
- const int n_color_stops = MIN (8, gsk_linear_gradient_node_get_n_color_stops (node));
- const GskColorStop *stops = gsk_linear_gradient_node_peek_color_stops (node, NULL);
- const graphene_point_t *start = gsk_linear_gradient_node_peek_start (node);
- const graphene_point_t *end = gsk_linear_gradient_node_peek_end (node);
-
- ops_set_program (builder, &self->programs->linear_gradient_program);
- ops_set_linear_gradient (builder,
- n_color_stops,
- stops,
- builder->dx + start->x,
- builder->dy + start->y,
- builder->dx + end->x,
- builder->dy + end->y);
+ const int n_color_stops = gsk_linear_gradient_node_get_n_color_stops (node);
- load_vertex_data (ops_draw (builder, NULL), node, builder);
+ if (n_color_stops < GL_MAX_GRADIENT_STOPS)
+ {
+ const GskColorStop *stops = gsk_linear_gradient_node_peek_color_stops (node, NULL);
+ const graphene_point_t *start = gsk_linear_gradient_node_peek_start (node);
+ const graphene_point_t *end = gsk_linear_gradient_node_peek_end (node);
+
+ ops_set_program (builder, &self->programs->linear_gradient_program);
+ ops_set_linear_gradient (builder,
+ n_color_stops,
+ stops,
+ builder->dx + start->x,
+ builder->dy + start->y,
+ builder->dx + end->x,
+ builder->dy + end->y);
+
+ load_vertex_data (ops_draw (builder, NULL), node, builder);
+ }
+ else
+ {
+ render_fallback_node (self, node, builder);
+ }
}
static inline void
GskRenderNode *node,
RenderOpBuilder *builder)
{
- const int n_color_stops = MIN (8, gsk_radial_gradient_node_get_n_color_stops (node));
- const GskColorStop *stops = gsk_radial_gradient_node_peek_color_stops (node, NULL);
- const graphene_point_t *center = gsk_radial_gradient_node_peek_center (node);
- const float start = gsk_radial_gradient_node_get_start (node);
- const float end = gsk_radial_gradient_node_get_end (node);
- const float hradius = gsk_radial_gradient_node_get_hradius (node);
- const float vradius = gsk_radial_gradient_node_get_vradius (node);
-
- ops_set_program (builder, &self->programs->radial_gradient_program);
- ops_set_radial_gradient (builder,
- n_color_stops,
- stops,
- builder->dx + center->x,
- builder->dy + center->y,
- start, end,
- hradius * builder->scale_x,
- vradius * builder->scale_y);
+ const int n_color_stops = gsk_radial_gradient_node_get_n_color_stops (node);
- load_vertex_data (ops_draw (builder, NULL), node, builder);
+ if (n_color_stops < GL_MAX_GRADIENT_STOPS)
+ {
+ const GskColorStop *stops = gsk_radial_gradient_node_peek_color_stops (node, NULL);
+ const graphene_point_t *center = gsk_radial_gradient_node_peek_center (node);
+ const float start = gsk_radial_gradient_node_get_start (node);
+ const float end = gsk_radial_gradient_node_get_end (node);
+ const float hradius = gsk_radial_gradient_node_get_hradius (node);
+ const float vradius = gsk_radial_gradient_node_get_vradius (node);
+
+ ops_set_program (builder, &self->programs->radial_gradient_program);
+ ops_set_radial_gradient (builder,
+ n_color_stops,
+ stops,
+ builder->dx + center->x,
+ builder->dy + center->y,
+ start, end,
+ hradius * builder->scale_x,
+ vradius * builder->scale_y);
+
+ load_vertex_data (ops_draw (builder, NULL), node, builder);
+ }
+ else
+ {
+ render_fallback_node (self, node, builder);
+ }
}
static inline gboolean